package cn.tree;

public class Tree {
    private Node rootNode;

    public Tree() {
        this.rootNode = null;
    }

    public Node getRootNode() {
        return rootNode;
    }

    public void setRootNode(Node rootNode) {
        this.rootNode = rootNode;
    }
    //给树添加节点(广度添加)
    public void addNode(int elm){
        if(this.rootNode==null){
            this.rootNode=new Node(elm);
            //this.queue.addNode(this.rootNode);
        }else{
            Queue queue=new Queue();
            queue.addNode(this.rootNode);
            while (queue.queueLenght()>0){
                Node node=queue.pop();
                if(node.getLeftNode()==null){
                    node.setLeftNode(new Node(elm));
                    return;
                }else{
                    queue.addNode(node.getLeftNode());
                }

                if(node.getRightNode()==null){
                    node.setRightNode(new Node(elm));
                    return;
                }else{
                    queue.addNode(node.getRightNode());
                }

            }
        }
    }
    //遍历树（广度遍历）
    public void travelTree(){
        if(this.rootNode!=null){
            Queue queue=new Queue();
            queue.addNode(this.rootNode);
            while (queue.queueLenght()>0){
                Node node=queue.pop();
                System.out.println(node.getElm());
                if(node.getLeftNode()!=null){
                    queue.addNode(node.getLeftNode());
                }
                if(node.getRightNode()!=null){
                    queue.addNode(node.getRightNode());
                }
            }
        }
    }
    //先序遍历

    /**
     *
     * @param node 树的根节点
     */
    public void preOrder(Node node){
        if(node==null){
            return;
        }
        System.out.println(node.getElm());
        preOrder(node.getLeftNode());
        preOrder(node.getRightNode());

    }
    //中序遍历
    public void inOrder(Node node){
        if(node==null){
            return;
        }
        inOrder(node.getLeftNode());
        System.out.println(node.getElm());
        inOrder(node.getRightNode());
    }
    //后序遍历
    public void postOrder(Node node){
        if(node==null){
            return;
        }
        postOrder(node.getLeftNode());
        postOrder(node.getRightNode());
        System.out.println(node.getElm());
    }
}
